package br.com.gerenteweb.managedBean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import br.com.gerenteweb.beans.Fornecedor;
import br.com.gerenteweb.daos.FornecedorDao;
import br.com.gerenteweb.interfaces.ManageBeansInterface;

/**
 * 
 * @author Felipe-
 *
 */
@ManagedBean(name = "fornecedorBean")
@SessionScoped
public class FornecedorBean implements Serializable, ManageBeansInterface {

	private static final long serialVersionUID = 1L;
	private Fornecedor fornecedor = new Fornecedor();
	private FornecedorDao fornecedorDao = new FornecedorDao();
	private List<Fornecedor> listFornecedores = new ArrayList<Fornecedor>();

	public FornecedorBean() {

	}

	@Override
	public String adicionar() {
		try {
			fornecedorDao.add(fornecedor);
			limpar();
			return "lista-de-fornecedores";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;

	}

	@Override
	public String remover() {
		try {
			Map<String, String> params = FacesContext.getCurrentInstance()
					.getExternalContext().getRequestParameterMap();
			String idFornecedor = params.get("idFornecedor");
			Fornecedor fornecedor = fornecedorDao.getPorID(Long
					.valueOf(idFornecedor));

			fornecedorDao.remove(fornecedor);
			limpar();
			return "lista-de-fornecedores";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;

	}

	@Override
	public String carregar() {
		try {
			Map<String, String> params = FacesContext.getCurrentInstance()
					.getExternalContext().getRequestParameterMap();
			String idFornecedor = params.get("idFornecedor");
			this.fornecedor = fornecedorDao
					.getPorID(Long.valueOf(idFornecedor));
			return "carregar-fornecedor";
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "lista-de-fornecedores";
	}

	@Override
	public void atualizar() {
		try {
			fornecedorDao.update(fornecedor);
			limpar();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void listar() {
		try {
			listFornecedores = fornecedorDao.getFornecedores();
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	@Override
	public void limpar() {
		fornecedor = new Fornecedor();
		fornecedorDao = new FornecedorDao();
		listFornecedores = new ArrayList<Fornecedor>();
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public FornecedorDao getFornecedorDao() {
		return fornecedorDao;
	}

	public void setFornecedorDao(FornecedorDao fornecedorDao) {
		this.fornecedorDao = fornecedorDao;
	}

	public List<Fornecedor> getListFornecedores() {
		listar();
		return listFornecedores;
	}

	public void setListFornecedores(List<Fornecedor> listFornecedores) {
		this.listFornecedores = listFornecedores;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((fornecedor == null) ? 0 : fornecedor.hashCode());
		result = prime * result
				+ ((fornecedorDao == null) ? 0 : fornecedorDao.hashCode());
		result = prime
				* result
				+ ((listFornecedores == null) ? 0 : listFornecedores.hashCode());
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		FornecedorBean other = (FornecedorBean) obj;
		if (fornecedor == null) {
			if (other.fornecedor != null)
				return false;
		} else if (!fornecedor.equals(other.fornecedor))
			return false;
		if (fornecedorDao == null) {
			if (other.fornecedorDao != null)
				return false;
		} else if (!fornecedorDao.equals(other.fornecedorDao))
			return false;
		if (listFornecedores == null) {
			if (other.listFornecedores != null)
				return false;
		} else if (!listFornecedores.equals(other.listFornecedores))
			return false;
		return true;
	}

}
